package cn.cjxy.day11springbootdemo2.controller;

import cn.cjxy.day11springbootdemo2.domain.User;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/** 参数接收
 *
 * @author huangjie
 * @date 2025/10/10
 */
@RequestMapping("/request")
@Controller
public class RequestController {
    /**
     * 1.请求对象接收,可以用api工具，也可以使用浏览器get请求携带参数发送
     * @param request
     * @return
     */
    @ResponseBody
    @RequestMapping("/paramaccept1")
    public String requestparam(HttpServletRequest request) {
        //名称必须跟请求地址中的参数匹配  才能获取参数
        String name = request.getParameter("name");
        String age = request.getParameter("age");

        System.out.println(name+age);
        return "请求成功！！！！！";
    }
    /**
     * 2.形参接收-普通参数
     * 参数名一致  自动匹配
     * 参数名不一致   不可获取  RequestParam("传递参数名称")
     */
    @ResponseBody
    @RequestMapping("/paramaccept2")
    public String simpleparam(@RequestParam("name1") String name, Integer age) {

        System.out.println(name+"-------"+age);
        return "请求成功！！！！！";
    }

    /**
     * 3.形参接收-实体参数
     * 简单实体参数
     * 当参数比较多时我们可以选择使用实体参数进行接收，实体类字段名称必须跟前端传递的参数名称一致，否则映射失败
     * @param user
     * @return
     */
    @ResponseBody
    @RequestMapping("/paramaccept3")
    public String domainparam(User user) {

        System.out.println(user);
        return "请求成功！！！！！";
    }

    /**
     *4.复杂实体参数
     * @param user
     * @return
     */
    @ResponseBody
    @RequestMapping("/paramaccept4")
    public String complexparam(User user) {

        System.out.println(user);
        return "请求成功！！！！！";
    }

    /**
     *5. 数组参数
     */
    @ResponseBody
    @RequestMapping("/paramaccept5")
    public String arrayparam(String[]  name) {
        System.out.println(Arrays.toString(name));
        return "请求成功！！！！！";
    }

    /**
     * 6.集合参数  集合必须使用@RequestParam注解
     */
    @ResponseBody
    @RequestMapping("/paramaccept6")
    public String arrayparam(@RequestParam List<String> name) {
        System.out.println(name);
        return "请求成功！！！！！";
    }

    /**
     * localhost:8080/paramaccept7?birthday=2025-08-23 12:00:00
     * 7.日期类型参数  必须指定日期格式，且请求日志必须是此格式
     * @param birthday
     * @return
     */
    @ResponseBody
    @RequestMapping("/paramaccept7")
    public String dateparam(@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") LocalDateTime birthday) {
        System.out.println(birthday);
        return "请求成功！！！！！";
    }

    /**
     * 8.接收json类型参数  需要加上@RequestBody
     * @param user
     * @return
     */
    @ResponseBody
    @RequestMapping(value = "/paramaccept8", method = RequestMethod.POST)
    public String jsonparam(@RequestBody User user) {
        System.out.println(user);
        return "----";
    }
    /**
     * 9.接收路径参数
     * 获取路径中的参数必须使用@PathVariable（路径参数名称）注解
     */
    @ResponseBody
    @RequestMapping(value = "/paramaccept9/{id}")
    public String urlparam(@PathVariable("id") Long id) {
        System.out.println(id);
        return "----";
    }
    //todo  第一遍，参照所写的内容，搭建springboot项目并成功启动，完成请求相关代码
    //todo   第二遍，已经写好的项目之中，另起一个requestcontroller2，重新用自己的方式完成请求相关的代码
    /**
     * todo  定义四个接口，使用apifox发送请求模拟数据的增删改查
     *
     */
    //使用hashmap来代替数据存储数据  使用put方法存放数据，建议做的顺序  增 改  查   删（移除某个键）
    private static Map<Long,User> userMap = new HashMap<Long,User>();

}
